package com.dubbo.common.id;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 自动增长策略
 * @author chenwei
 * @date 2019年2月14日 上午11:35:19
 */
public class IdentityUtils {
	
	/**
	 * 文件命名的自动增长策略
	 * 
	 * @author chenwei
	 * @date 2019年2月26日 下午2:44:28
	 * @param files 多个文件名 注意文件名必须为数字
	 * @return
	 */
	public synchronized static String getFileId(List<String> files,Integer filesSize) {
		if(files == null ) {
			return null;
		}
		if(files.isEmpty()) {
			return "1";
		}
		files = files.stream().map(p -> {
			if(p.contains(".")) {
				return p.substring(0, p.indexOf("."));
			}
			return p;
		}).sorted(new Comparator<String>() {//从小到大排序
			@Override
			public int compare(String o1, String o2) {
				return new BigInteger(o1).compareTo(new BigInteger(o2));
			}
		}).collect(Collectors.toList());
		int maxIndex = Integer.parseInt(files.get(files.size() -1));
		filesSize = filesSize == null? 100:filesSize;
		if(files.size() >= filesSize) {//设置当前目录下的自动增长上限
			return null;
		}
		Integer[] identitys = new Integer[maxIndex+1];
		List<Integer> identityList = Arrays.asList(identitys);
		identityList.set(0, 1);
		files.stream().forEach(p ->{
			identityList.set(Integer.parseInt(p), 1);
		});
		for (Integer temp : identityList) {
			if(temp == null) {
				return identityList.indexOf(temp) + "";
			}
		}
		return identityList.size() +"";
	}
}
